﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace Repositories.Interfaces
{
	public interface ICustomersRepository : IBaseRepository<Customers>
	{
        /// <summary>
        /// Creates the Customers.
        /// </summary>
        /// <param name="item">The item.</param>
        void CreateCustomers(Customers item);

        /// <summary>
        /// Queries the Customers.
        /// </summary>
        /// <param name="predicate">The predicate.</param>
        /// <returns>Query results.</returns>
        IQueryable<Customers> QueryCustomers(Expression<Func<Customers, bool>> predicate);

        /// <summary>
        /// Finds the by ID.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns>The Customers with input ID.</returns>
        Customers FindById(int id);

        /// <summary>
        /// Gets all Customers.
        /// </summary>
        /// <returns>all Customers.</returns>
        List<Customers> GetAllCustomers();



        /// <summary>
        /// Gets all Customers.
        /// </summary>
        /// <returns>all Customers.</returns>
        List<Customers> GetAllCustomers(string filter);
        
        /// <summary>
        /// Edits the Customers.
        /// </summary>
        /// <param name="item">The item.</param>
        void EditCustomers(Customers item);


        /// <summary>
        /// Deletes the Customers.
        /// </summary>
        /// <param name="item">The item.</param>
        void DeleteCustomers(Customers item);

        /// <summary>
        /// Applies the changes to database.
        /// </summary>
        void ApplyTheChanges();

        /// <summary>
        /// Accepts all changes.
        /// </summary>
        void AcceptAllChanges();

        /// <summary>
        /// Refreshes this instance.
        /// </summary>
        void Refresh();
	}
}
